String.prototype.hasString = function(a) {
	if (typeof a == "object") {
		for ( var b = 0, c = a.length; b < c; b++)
			if (!this.hasString(a[b]))
				return false;
		return true
	} else if (this.indexOf(a) != -1)
		return true
};
String.prototype.breakWord = function(a, b) {
	b || (b = "<wbr/>");
	return this.replace(RegExp("(\\w{" + (a ? a : 0) + "})(\\w)", "g"),
			function(c, e, f) {
				return e + b + f
			})
};
UI = {
	ajax : function(a) {
		var b = a.xhr || UI.xmlHttp(), c, e;
		b.onreadystatechange = function() {
			if (b.readyState == 1) {
				if (a.timeout && a.fail)
					e = setTimeout(function() {
						if (!c) {
							b.abort();
							a.fail()
						}
					}, a.timeout)
			} else if (b.readyState == 2)
				a.send && a.send();
			else if (b.readyState == 4) {
				c = 1;
				if (b.status == 200)
					try {
						a.success(b.responseText)
					} catch (k) {
					}
				else if (a.fail) {
					clearTimeout(e);
					a.fail()
				}
			}
		};
		if (UI.isObject(a.data)) {
			var f = [], i;
			for (i in a.data)
				f.push(i + "=" + encodeURIComponent(a.data[i]));
			a.data = f.join("&")
		}
		if (a.type == "get") {
			b.open("GET", a.url + (a.url.hasString("?") ? "&" : "?") + a.data,
					true);
			b.send(null)
		} else {
			b.open("POST", a.url, true);
			b.setRequestHeader("Content-type",
					"application/x-www-form-urlencoded");
			b.send(a.data)
		}
		return b
	},
	get : function(a, b, c) {
		var e = UI.xmlHttp(), f = a.hasString("?") ? "&" : "?";
		e.onreadystatechange = function() {
			if (e.readyState == 4 && e.status == 200)
				try {
					c(e.responseText)
				} catch (p) {
				}
			else
				return e
		};
		if (b != undefined)
			if (UI.isObject(b)) {
				var i = [], k;
				for (k in b)
					i.push(k + "=" + encodeURIComponent(b[k]));
				a += f + i.join("&")
			} else
				a += f + b;
		e.open("GET", a, true);
		e.send(null);
		return e
	},
	xmlHttp : function() {
		var a;
		if (window.ActiveXObject)
			a = new ActiveXObject("Microsoft.XMLHTTP");
		else if (window.XMLHttpRequest)
			a = new XMLHttpRequest;
		return a
	},
	crossAsynJson : function(a, b, c, e) {
		var f = UI.DC("script"), i = UI.GT(document, "head")[0];
		window[b] = function(k) {
			window[b] = undefined;
			try {
				delete window[b]
			} catch (p) {
			}
			c(k);
			i && setTimeout(function() {
				i.removeChild(f)
			}, 5)
		};
		e && UI.A(f, "charset", e);
		UI.A(f, "type", "text/javascript");
		UI.A(f, "src", a);
		i.appendChild(f)
	},
	getScript : function(a, b, c) {
		var e = UI.DC("script");
		if (b)
			if (UI.B.ie)
				e.onreadystatechange = function() {
					if (e.readyState == "loaded" || e.readyState == "complete")
						b()
				};
			else
				e.onload = function() {
					b()
				};
		c && UI.A(e, "charset", c);
		UI.A(e, "type", "text/javascript");
		UI.A(e, "src", a);
		UI.A(e, "async", "true");
		UI.GT(document, "head")[0].appendChild(e)
	},
	getCss : function(a, b, c) {
		var e = c ? c : UI.DC("link");
		if (b)
			e.onload = b;
		if (!c) {
			UI.A(e, "rel", "stylesheet");
			UI.A(e, "type", "text/css");
			UI.GT(document, "head")[0].appendChild(e)
		}
		UI.A(e, "href", a)
	},
	evalScript : function(a) {
		var b = this.regExp.script;
		(a = a.match(RegExp(b, "img"))) && UI.each(a, function(c) {
			eval(c.match(RegExp(b, "im"))[1])
		})
	},
	regExp : {
		script : "<script[^>]*>([\\S\\s]*?)<\/script>"
	},
	encode : function(a) {
		return escape(UI.utfEncode(a))
	},
	decode : function(a) {
		return UI.utfDecode(unescape(a))
	},
	utfEncode : function(a) {
		a = a.replace(/\r\n/g, "\n");
		for ( var b = "", c = 0; c < a.length; c++) {
			var e = a.charCodeAt(c);
			if (e < 128)
				b += String.fromCharCode(e);
			else {
				if (e > 127 && e < 2048)
					b += String.fromCharCode(e >> 6 | 192);
				else {
					b += String.fromCharCode(e >> 12 | 224);
					b += String.fromCharCode(e >> 6 & 63 | 128)
				}
				b += String.fromCharCode(e & 63 | 128)
			}
		}
		return b
	},
	utfDecode : function(a) {
		for ( var b = "", c = 0, e = c1 = c2 = 0; c < a.length;) {
			e = a.charCodeAt(c);
			if (e < 128) {
				b += String.fromCharCode(e);
				c++
			} else if (e > 191 && e < 224) {
				c2 = a.charCodeAt(c + 1);
				b += String.fromCharCode((e & 31) << 6 | c2 & 63);
				c += 2
			} else {
				c2 = a.charCodeAt(c + 1);
				c3 = a.charCodeAt(c + 2);
				b += String.fromCharCode((e & 15) << 12 | (c2 & 63) << 6 | c3
						& 63);
				c += 3
			}
		}
		return b
	},
	parseUrl : function(a, b) {
		var c = a ? a : document.location.href, e = {};
		b = b || "?";
		if (!c.hasString(b))
			return e;
		c = c.split(b)[1].split("&");
		for ( var f = 0; f < c.length; f++) {
			var i = c[f].replace(/#.*$/g, "").split("=");
			i[1] || (i[1] = "");
			e[i[0]] = UI.B.ie ? i[1] : UI.decode(i[1])
		}
		return e
	},
	cookie : function(a, b, c, e) {
		if (b == undefined) {
			a += "=";
			b = document.cookie.split(";");
			for (c = 0; c < b.length; c++) {
				for (e = b[c]; e.charAt(0) == " ";)
					e = e.substring(1, e.length);
				if (e.indexOf(a) == 0)
					return decodeURIComponent(e.substring(a.length, e.length))
			}
			return null
		} else {
			var f = "";
			if (c) {
				f = new Date;
				f.setTime(f.getTime() + c * 864E5);
				f = "; expires=" + f.toGMTString()
			}
			document.cookie = a + "=" + b + f + "; path=/"
					+ (e ? ";domain=" + e : "")
		}
	},
	drag : function(a, b, c) {
		var e = document;
		c = c != undefined ? c : true;
		UI.EA(a, "mousedown", function(f) {
			b.start && b.start(f);
			if (c)
				if (a.setCapture)
					a.setCapture();
				else
					window.captureEvents
							&& window.captureEvents(Event.MOUSEMOVE
									| Event.MOUSEUP);
			if (b.drag)
				e.onmousemove = b.drag;
			e.onmouseup = function() {
				if (c)
					if (a.releaseCapture)
						a.releaseCapture();
					else
						window.captureEvents
								&& window.captureEvents(Event.MOUSEMOVE
										| Event.MOUSEUP);
				b.stop && b.stop(f);
				e.onmousemove = null;
				e.onmouseup = null;
				b.call && b.call(f)
			}
		})
	},
	animate : function(a, b, c, e, f, i) {
		f = f || 0.4;
		var k = b.hasString("scroll"), p = "height,width,marginLeft,marginTop"
				.hasString(b), o, g = setInterval(function() {
			var l, j, h, m = b == "opacity";
			l = p ? a.style[b] : k ? a[b] : UI.C(a, b);
			if (m) {
				l *= 100;
				c *= 100;
				if (c > 100)
					c = 100
			} else
				k || (l = l == "auto" ? 0 : Number(l.slice(0, -2)));
			if (Math.abs(c - l) <= 3 || k && o == l) {
				l = c;
				clearInterval(g)
			}
			h = (c - l) * f;
			if (!m)
				if (h > 0 && h < 1)
					h = 1;
				else if (h < 0 && h > -1)
					h = -1;
			j = o = l + h;
			if (!m && (h < 0 && c - j > 0 || h > 0 && j - c > 0))
				j = c;
			if (p)
				a.style[b] = j + "px";
			else if (k)
				a[b] = parseInt(j);
			else
				UI.C(a, b, !m ? j + "px" : j / 100 + "");
			if (l == c)
				if (UI.isString(e))
					eval(e);
				else
					e && e()
		}, i || 40);
		return g
	},
	getX : function(a) {
		return (a.offsetParent ? a.offsetLeft + UI.getX(a.offsetParent)
				: a.offsetLeft)
				+ (UI.C(a, "position") == "fixed" ? UI.scrollX() : 0)
	},
	getY : function(a) {
		return (a.offsetParent ? a.offsetTop + UI.getY(a.offsetParent)
				: a.offsetTop)
				+ (UI.C(a, "position") == "fixed" ? UI.scrollY() : 0)
	},
	within : function(a, b) {
		var c = UI.getX(b) - UI.scrollX(), e = UI.width(b) + c, f = UI.getY(b)
				- UI.scrollY(), i = UI.height(b) + f, k = {};
		if (a[0] > c && a[0] < e && a[1] > f && a[1] < i) {
			if (a[0] - c < (e - c) / 2)
				k.left = true;
			if (a[1] - f < (i - f) / 2)
				k.top = true;
			return k
		}
	},
	frameX : function(a) {
		return a.frameElement ? UI.getX(a.frameElement) + UI.frameX(a.parent)
				: 0
	},
	frameY : function(a) {
		return a.frameElement ? UI.getY(a.frameElement) + UI.frameY(a.parent)
				: 0
	},
	width : function(a) {
		return parseInt(a.offsetWidth)
	},
	height : function(a) {
		return parseInt(a.offsetHeight)
	},
	pageWidth : function() {
		return document.body.scrollWidth
				|| document.documentElement.scrollWidth
	},
	pageHeight : function() {
		return document.body.scrollHeight
				|| document.documentElement.scrollHeight
	},
	windowWidth : function() {
		var a = document.documentElement;
		return self.innerWidth || a && a.clientWidth
				|| document.body.clientWidth
	},
	windowHeight : function() {
		var a = document.documentElement;
		return self.innerHeight || a && a.clientHeight
				|| document.body.clientHeight
	},
	scrollX : function(a) {
		var b = document.documentElement;
		if (a) {
			var c = a.parentNode, e = a.scrollLeft || 0;
			if (a == b)
				e = UI.scrollX();
			return c ? e + UI.scrollX(c) : e
		}
		return self.pageXOffset || b && b.scrollLeft
				|| document.body.scrollLeft
	},
	scrollY : function(a) {
		var b = document.documentElement;
		if (a) {
			var c = a.parentNode, e = a.scrollTop || 0;
			if (a == b)
				e = UI.scrollY();
			return c ? e + UI.scrollY(c) : e
		}
		return self.pageYOffset || b && b.scrollTop || document.body.scrollTop
	},
	scrollTo : function(a, b, c) {
		if (a == document.documentElement || a == document.body)
			return window.scrollTo(b, c)
	},
	hide : function(a) {
		if (UI.isString(a))
			a = this.G(a);
		if (a) {
			var b = this.C(a, "display");
			if (b != "none")
				a.__curDisplay = b;
			a.style.display = "none"
		}
	},
	show : function(a) {
		if (UI.isString(a))
			a = this.G(a);
		if (a)
			a.style.display = a.__curDisplay || ""
	},
	toggle : function(a) {
		if (UI.isString(a))
			a = this.G(a);
		this.C(a, "display") == "none" ? this.show(a) : this.hide(a)
	},
	hasClass : function(a, b) {
		if (!a || !a.className)
			return false;
		return a.className != a.className
				.replace(RegExp("\\b" + b + "\\b"), "")
	},
	addClass : function(a, b) {
		if (a)
			if (a.className)
				if (this.hasClass(a, b))
					return false;
				else
					a.className += " " + b;
			else
				a.className = b
	},
	removeClass : function(a, b) {
		if (a)
			a.className = a.className.replace(RegExp("\\b" + b + "\\b"), "")
	},
	toggleClass : function(a, b) {
		this.hasClass(a, b) ? this.removeClass(a, b) : this.addClass(a, b)
	},
	next : function(a) {
		a = a.nextSibling;
		if (a == null)
			return false;
		return UI.isElement(a) ? a : this.next(a)
	},
	prev : function(a) {
		a = a.previousSibling;
		if (a == null)
			return false;
		return UI.isElement(a) ? a : this.prev(a)
	},
	remove : function(a) {
		a && a.parentNode && a.parentNode.removeChild(a)
	},
	append : function(a, b) {
		b.appendChild(a)
	},
	prepend : function(a, b) {
		var c = b.firstChild;
		c ? UI.before(a, c) : UI.append(a, b)
	},
	after : function(a, b) {
		var c = b.parentNode;
		c.lastChild == a ? c.appendChild(a) : c.insertBefore(a, b.nextSibling)
	},
	before : function(a, b) {
		b.parentNode.insertBefore(a, b)
	},
	replace : function(a, b) {
		b.parentNode.replaceChild(a, b)
	},
	swap : function() {
	},
	wrap : function(a, b) {
		if (UI.isString(a)) {
			a.match(/(<[^\/][^<]*>)/g);
			var c = RegExp.lastMatch;
			a = a.replace(c, c + '<pre class="wrapObject___"></pre>');
			c = UI.html(a)[0];
			UI.before(c, b);
			UI.replace(b, UI.GC(c, "pre.wrapObject___")[0])
		} else {
			UI.before(a, b);
			a.appendChild(b)
		}
	},
	tmpl : function() {
		var a = {};
		return function b(c, e) {
			var f = !/\W/.test(c) ? a[c] = a[c] || b(UI.G(c).innerHTML) : UI
					.tmplString(c);
			return e ? f(e) : f
		}
	}(),
	tmplString : function(a) {
		return new Function("obj",
				"var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"
						+ a.replace(/[\r\t\n]/g, " ").split("<%").join("\t")
								.replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(
										/\t=(.*?)%>/g, "',$1,'").split("\t")
								.join("');").split("%>").join("p.push('")
								.split("\r").join("\\'")
						+ "');}return p.join('');")
	},
	html : function(a) {
		var b = UI.DC("div"), c = [];
		b.innerHTML = a;
		UI.each(b.childNodes, function(e) {
			c.push(e)
		});
		return c
	},
	css : function(a, b) {
		var c;
		if (!b) {
			b = UI.DC("style");
			UI.A(b, "type", "text/css");
			UI.append(b, UI.GT(document, "head")[0])
		}
		if (b.styleSheet)
			b.styleSheet.cssText = a;
		else {
			c = document.createTextNode(a);
			UI.append(c, b)
		}
	},
	text : function(a) {
		var b = [];
		a = a.childNodes;
		for ( var c, e = 0, f = a.length; e < f; e++) {
			c = a[e].nodeName.toUpperCase();
			c == "STYLE"
					|| c == "SCRIPT"
					|| b.push(a[e].nodeType != 1 ? a[e].nodeValue : UI
							.text(a[e]))
		}
		return b.join("")
	},
	parent : function(a, b) {
		if (UI.isArray(a)) {
			var c = [];
			UI.each(a, function(e) {
				if (b && UI.hasClass(e.parentNode, b) || !b)
					c.push(e.parentNode)
			});
			return c
		}
		return a.parentNode
	},
	parents : function(a, b) {
		if (b) {
			var c = [], e = UI.parents(a);
			UI.each(e, function(f) {
				UI.hasClass(f, b) && c.push(f)
			});
			return c
		}
		return (e = a.parentNode) ? e.nodeName == "HTML" ? [ e ] : [ e ]
				.concat(UI.parents(e)) : []
	},
	children : function(a, b) {
		var c = [];
		if (b)
			b = b.split("|");
		UI.each(a.childNodes, function(e) {
			var f = false;
			if (b)
				for ( var i = 0, k = b.length; i < k; i++)
					if (UI.hasClass(e, b[i])) {
						f = true;
						break
					}
			if (UI.isElement(e) && (!b || f))
				c.push(e)
		});
		return c
	},
	A : function(a, b, c) {
		if (c == undefined)
			return a.getAttribute(b);
		else
			c == "" ? a.removeAttribute(b) : a.setAttribute(b, c)
	},
	C : function(a, b, c) {
		if (c == undefined)
			if (window.getComputedStyle) {
				b = b.replace(/([A-Z])/g, "-$1");
				b = b.toLowerCase();
				return window.getComputedStyle(a, null).getPropertyValue(b)
			} else {
				if (a.currentStyle) {
					if (b == "opacity")
						return a.style.filter.indexOf("opacity=") >= 0 ? parseFloat(a.style.filter
								.match(/opacity=([^)]*)/)[1]) / 100
								: "1";
					return a.currentStyle[b]
				}
			}
		else if (b == "opacity" && UI.B.ie && !UI.B.ie9)
			a.style.filter = (a.filter || "").replace(/alpha\([^)]*\)/, "")
					+ "alpha(opacity=" + c * 100 + ")";
		else
			a.style[b] = c
	},
	DC : function(a) {
		return document.createElement(a)
	},
	E : function(a) {
		if (a && a.clone)
			return a;
		a = window.event || a || {};
		return {
			clone : true,
			stop : function() {
				if (a && a.stopPropagation)
					a.stopPropagation();
				else
					a.cancelBubble = true
			},
			prevent : function() {
				if (a && a.preventDefault)
					a.preventDefault();
				else
					a.returnValue = false
			},
			target : a.target || a.srcElement,
			relatedTarget : a.relatedTarget
					|| (a.fromElement && a.fromElement === a.srcElement ? a.toElement
							: a.fromElement),
			x : a.clientX || a.pageX,
			y : a.clientY || a.pageY,
			button : a.button,
			key : a.keyCode,
			shift : a.shiftKey,
			alt : a.altKey,
			ctrl : a.ctrlKey,
			type : a.type,
			wheel : a.wheelDelta / 120 || -a.detail / 3
		}
	},
	EA : function(a, b, c, e) {
		if (a) {
			if (UI.isString(a)) {
				var f = c;
				c = function() {
					eval(f)
				}
			}
			if (a.addEventListener) {
				if (b == "mousewheel" && UI.B.firefox)
					b = "DOMMouseScroll";
				a.addEventListener(b, c, e);
				return true
			} else
				return a.attachEvent ? a.attachEvent("on" + b, c) : false
		}
	},
	ER : function(a, b, c) {
		if (a)
			if (a.removeEventListener) {
				a.removeEventListener(b, c, false);
				return true
			} else
				return a.detachEvent ? a.detachEvent("on" + b, c) : false
	},
	fireEvent : function(a, b) {
		if (document.createEventObject) {
			var c = document.createEventObject();
			return a.fireEvent("on" + b, c)
		} else {
			c = document.createEvent("HTMLEvents");
			c.initEvent(b, true, true);
			return !a.dispatchEvent(c)
		}
	},
	G : function(a) {
		return UI.isElement(a) ? a : document.getElementById(a)
	},
	GT : function(a, b) {
		return a.getElementsByTagName(b)
	},
	GC : function() {
		function a(g, l) {
			if (!l) {
				l = g;
				g = document
			}
			g = g || document;
			if (!/^[\w\-_#]+$/.test(l) && g.querySelectorAll)
				return b(g.querySelectorAll(l));
			if (l.indexOf(",") > -1) {
				for ( var j = l.split(/,/g), h = [], m = 0, n = j.length; m < n; ++m)
					h = h.concat(a(g, j[m]));
				return o(h)
			}
			j = l.match(e);
			n = j.pop();
			h = (n.match(i) || p)[1];
			var q = !h && (n.match(f) || p)[1];
			m = n.split(".").slice(2);
			n = !h && (n.match(k) || p)[1];
			if (q && !n && g.getElementsByClassName)
				n = b(g.getElementsByClassName(q));
			else {
				n = !h && b(g.getElementsByTagName(n || "*"));
				if (q) {
					q = RegExp("(^|\\s)" + q + "(\\s|$)");
					var s = -1, t, u = -1, r = [];
					for (m = m || ""; t = n[++s];)
						if (q.test(t.className) && t.className.hasString(m))
							r[++u] = t;
					n = r
				}
				if (h)
					return (j = g.getElementById(h)) ? [ j ] : []
			}
			return j[0] && n[0] ? c(j, n) : n
		}
		function b(g) {
			try {
				return Array.prototype.slice.call(g)
			} catch (l) {
				for ( var j = [], h = 0, m = g.length; h < m; ++h)
					j[h] = g[h];
				return j
			}
		}
		function c(g, l, j) {
			var h = g.pop();
			if (h === ">")
				return c(g, l, true);
			var m = [], n = -1, q = (h.match(i) || p)[1], s = !q
					&& (h.match(f) || p)[1];
			h = !q && (h.match(k) || p)[1];
			var t = -1, u, r, v;
			for (h = h && h.toLowerCase(); u = l[++t];) {
				r = u.parentNode;
				do {
					v = (v = (v = !h || h === "*"
							|| h === r.nodeName.toLowerCase())
							&& (!q || r.id === q))
							&& (!s || RegExp("(^|\\s)" + s + "(\\s|$)").test(
									r.className));
					if (j || v)
						break
				} while (r = r.parentNode);
				if (v)
					m[++n] = u
			}
			return g[0] && m[0] ? c(g, m) : m
		}
		var e = /(?:[\w\-\\.#]+)+(?:\[\w+?=([\'"])?(?:\\\1|.)+?\1\])?|\*|>/ig, f = /^(?:[\w\-_]+)?\.([\w\-_]+)/, i = /^(?:[\w\-_]+)?#([\w\-_]+)/, k = /^([\w\*\-_]+)/, p = [
				null, null ], o = function() {
			var g = +new Date, l = function() {
				var j = 1;
				return function(h) {
					var m = h[g], n = j++;
					if (!m) {
						h[g] = n;
						return true
					}
					return false
				}
			}();
			return function(j) {
				for ( var h = j.length, m = [], n = -1, q = 0, s; q < h; ++q) {
					s = j[q];
					if (l(s))
						m[++n] = s
				}
				g += 1;
				return m
			}
		}();
		return a
	}(),
	$ : function() {
	}(),
	closest : function(a, b, c) {
		contenxt = c || document;
		for (b = UI.GC(c, b); a;) {
			if (UI.has(b, a))
				return a;
			a = a.parentNode
		}
		return null
	},
	getEvent : function() {
		if (document.all)
			return window.event;
		for ( var a = arguments.callee.caller; a;) {
			var b = a.arguments[0];
			if (b
					&& (b.constructor === Event || b.constructor === MouseEvent || typeof b === "object"
							&& b.preventDefault && b.stopPropagation))
				return b;
			a = a.caller
		}
		return null
	},
	withinElement : function(a, b) {
		b = UI.E(b || UI.getEvent());
		for ( var c = b.relatedTarget || document; c;) {
			if (a === c)
				return true;
			c = c.parentNode
		}
		return false
	},
	isDate : function(a) {
		return this.getType(a) == "Date"
	},
	cloneDate : function(a) {
		if (!a)
			return a;
		d = new Date;
		d.setTime(a.getTime());
		return d
	},
	formatDate : function(a, b) {
		for ( var c = b.replace(/\W/g, ",").split(","), e = [ "yyyy", "MM",
				"dd", "hh", "mm", "ss", "ww" ], f = {
			y : a.getFullYear(),
			M : a.getMonth() + 1,
			d : a.getDate(),
			h : a.getHours(),
			m : a.getMinutes(),
			s : a.getSeconds(),
			w : a.getDay()
		}, i = 0, k = c.length; i < k; i++)
			for ( var p = c[i], o = 0; o < 7; o++) {
				var g = e[o].slice(-1);
				if (p.hasString(g)) {
					if (g == "w" && f[g] == 0)
						f[g] = 7;
					b = p.hasString(e[o]) ? b.replace(RegExp(e[o], "g"), this
							.addZero(f[g])) : b.replace(RegExp(e[o]
							.slice(e[o].length / 2), "g"), f[g])
				}
			}
		return b
	},
	parseDate : function(a, b) {
		b || (b = "yyyy-MM-dd");
		b = b.replace(/\W/g, ",").split(",");
		a = a.replace(/\D/g, ",").split(",");
		var c = 2E3, e = 0, f = 1, i = 0, k = 0, p = 0;
		UI.each(b, function(o, g) {
			if (a[g] != "" && !isNaN(a[g])) {
				if (o.hasString("y"))
					c = Number(a[g]);
				if (o.hasString("M"))
					e = Number(a[g]) - 1;
				if (o.hasString("d"))
					f = Number(a[g]);
				if (o.hasString("h"))
					i = Number(a[g]);
				if (o.hasString("m"))
					k = Number(a[g]);
				if (o.hasString("s"))
					p = Number(a[g]);
				if (o.hasString("w"))
					p = Number(a[g])
			}
		});
		return new Date(c, e, f, i, k, p)
	},
	zoneDate : function(a, b) {
		var c = new Date(Number(a));
		c = c.getTime() + c.getTimezoneOffset() * 6E4;
		return new Date(c + 36E5 * b)
	},
	isObject : function(a) {
		return typeof a == "object"
	},
	isElement : function(a) {
		return a && a.nodeType == 1
	},
	isUndefined : function(a) {
		return typeof a == "undefined"
	},
	isFunction : function(a) {
		return this.getType(a) == "Function"
	},
	isNumber : function(a) {
		return this.getType(a) == "Number"
	},
	isString : function(a) {
		return this.getType(a) == "String"
	},
	isArray : function(a) {
		return this.getType(a) == "Array"
	},
	getType : function(a) {
		return Object.prototype.toString.call(a).slice(8, -1)
	},
	json : function(a) {
		var b = {};
		try {
			b = eval("(" + a + ")")
		} catch (c) {
		}
		return b
	},
	json2str : function(a) {
		var b = [], c = UI.isArray(a);
		if (UI.isObject(a)) {
			if (a === null)
				return "null";
			if (window.JSON && window.JSON.stringify)
				return JSON.stringify(a);
			for ( var e in a)
				b.push((c ? "" : '"' + e + '":') + UI.json2str(a[e]));
			b = b.join();
			return c ? "[" + b + "]" : "{" + b + "}"
		} else if (UI.isNumber(a) || UI.isFunction(a))
			return a.toString();
		else if (UI.isUndefined(a))
			return "undefined";
		return !a ? '""' : '"' + a + '"'
	},
	addZero : function(a, b) {
		b || (b = 2);
		return Array(Math.abs(("" + a).length - (b + 1))).join(0) + a
	},
	trim : function(a) {
		return a.replace(/^\s+|\s+$/g, "")
	},
	random : function(a, b) {
		if (a == undefined)
			a = 0;
		if (b == undefined)
			b = 9;
		return Math.floor(Math.random() * (b - a + 1) + a)
	},
	has : function(a, b) {
		for ( var c = 0, e = a.length; c < e; c++)
			if (a[c] == b)
				return true;
		return false
	},
	each : function(a, b) {
		if (a)
			if (UI.isUndefined(a[0]))
				for ( var c in a)
					UI.isFunction(a[c]) || b(a[c], c);
			else {
				c = 0;
				for ( var e = a.length; c < e; c++)
					UI.isFunction(a[c]) || b(a[c], c)
			}
	},
	map : function(a, b) {
		if (UI.isString(b))
			b = eval("(function(a,i) { return " + b + "})");
		var c = [];
		UI.each(a, function(e, f) {
			var i = b(e, f);
			if (UI.isArray(i))
				c = c.concat(i);
			else
				c.push(i)
		});
		return c
	},
	grep : function(a, b) {
		if (UI.isString(b))
			b = eval("(function(a,i) { return " + b + "})");
		var c = [];
		UI.each(a, function(e, f) {
			b(e, f) && c.push(e)
		});
		return c
	},
	merge : function(a, b) {
		var c = [];
		if (b) {
			UI.each(b, function(e) {
				UI.has(a, e) || c.push(e)
			});
			return a.concat(c)
		} else {
			UI.each(a, function(e) {
				UI.has(c, e) || c.push(e)
			});
			return c
		}
	},
	sort : {
		number : function(a, b) {
			return a - b
		},
		numberDesc : function(a, b) {
			return b - a
		},
		string : function(a, b) {
			return a.localeCompare(b)
		},
		stringDesc : function(a, b) {
			return b.localeCompare(a)
		}
	},
	ready : function(a) {
		if (UI.ready.done)
			return a();
		if (UI.isReady.done)
			UI.readyDo.push(a);
		else {
			UI.readyDo = [ a ];
			UI.isReady()
		}
	},
	readyDo : [],
	isReady : function() {
		if (!UI.isReady.done) {
			UI.isReady.done = true;
			if (document.readyState == "complete")
				UI.onReady();
			else if (document.addEventListener)
				if (document.readyState == "interactive")
					UI.onReady();
				else
					document.addEventListener("DOMContentLoaded", function() {
						document.removeEventListener("DOMContentLoaded",
								arguments.callee, false);
						UI.onReady()
					}, false);
			else if (document.attachEvent) {
				var a = top != self;
				if (a)
					document.attachEvent("onreadystatechange", function() {
						if (document.readyState === "complete") {
							document.detachEvent("onreadystatechange",
									arguments.callee);
							UI.onReady()
						}
					});
				else
					document.documentElement.doScroll && !a && function() {
						if (!UI.ready.done) {
							try {
								document.documentElement.doScroll("left")
							} catch (b) {
								setTimeout(arguments.callee, 0);
								return
							}
							UI.onReady()
						}
					}()
			}
			UI.EA(window, "load", UI.onReady)
		}
	},
	onReady : function() {
		if (!UI.ready.done) {
			UI.ready.done = true;
			for ( var a = 0, b = UI.readyDo.length; a < b; a++)
				try {
					UI.readyDo[a]()
				} catch (c) {
				}
			UI.readyDo = null
		}
	},
	B : function() {
		var a = {}, b = navigator.userAgent;
		a.win = b.hasString("Windows") || b.hasString("Win32");
		a.ie6 = b.hasString("MSIE 6") && !b.hasString("MSIE 7")
				&& !b.hasString("MSIE 8");
		a.ie8 = b.hasString("MSIE 8");
		a.ie9 = b.hasString("MSIE 9");
		a.ie = b.hasString("MSIE");
		a.tt = b.hasString("TencentTraveler");
		a.opera = window.opera || b.hasString("Opera");
		a.safari = b.hasString("WebKit");
		a.chrome = b.hasString("Chrome");
		a.ipad = b.hasString("iPad");
		a.mac = b.hasString("Mac");
		a.firefox = b.hasString("Firefox");
		try {
			a.maxthon = window.external && window.external.max_version
		} catch (c) {
		}
		return a
	}()
};
UI.B.ie && document.execCommand("BackgroundImageCache", false, true);
window.console || (console = {
	log : function(a) {
		document.title += "_" + a
	},
	dir : function() {
	}
});